/* $$$ JS file: fixes.js: */
function _blank(url) {
	window.open(url, '_blank' + Math.floor(Math.random() * 10000), '');
	return false;
}

function hoverAddNewGossip(obj, amount) {
	obj.style.marginTop = amount + 'px';
}


function itemClickCount(itemId) {
	return ajax.request('/gossip/countClick/' + itemId);
}

//   _n_
//    ('>
//    / )
//__,,/,,__
//  //	
/* $$$ JS file: nDynamic/nDynamic.js: */
/**
 * Dynamize object.
 * Add new features to object, depending on loaded nLibraries (nAction, nListener).
 * @author : Nickesh (nickesh.pl[at]gmail.com).
 * @copyright : 2006-2009 Nickesh
 * @date: 2009.07.18
 */
function nDynamic(obj) {
	obj.nName = 'nDynamic';

	if (window.nAction) {
		obj.motion = function(options) {
			var motionAction = new nAction({
				obj: obj,
				beforeActivate:function(end) {
					if (end != undefined) {
						this.end = end;
					}
					this.start = this.n;
					this.detectDirection();
				},
				onLoop:function() {
					this.decelerate();
				},
				onEndDetection:function() {
					if (this.isEnd()) {
						this.n = this.end;
						this.deactivate();
					}
				},
				onInitialize: ((options.onInitialize)? options.onInitialize : null)
				//onActivate
				//onUpdate
				//onDeactivate
			});
			
			motionAction.setOptions(options);
			return motionAction;
		}
	}
	
	if (window.nListener) {
		obj.point = function(options) {
			var newListener = new nListener({
				obj: obj,
				start: {x: 0, y: 0},
				n: {x: 0, y: 0},
				startScreen: null,
				
				// onInitialize
				beforeActivate:function() {
					this.startScreen = {x: this.event.screenX, y: this.event.screenY};
					nConfig.preventSelection();
				},
				// onActivate
				onLoop:function() {
					this.captureRelativeXY();
				},
				captureRelativeXY:function() {
					this.n.x = this.relativeX();
					this.n.y = this.relativeY();
				},
				relativeX:function() {
					return this.start.x + this.distanceX();
				},
				relativeY:function() {
					return this.start.y + this.distanceY();
				},
				distanceX:function() {
					return this.event.screenX - this.startScreen.x;
				},
				distanceY:function() {
					return this.event.screenY - this.startScreen.y;
				},
				limit:function(n, min, max) {
					if (n < min) return min;
					if (n > max) return max;
					return n;
				},
				// onUpdate
				// onDeactivate
				afterDeactivate:function() {
					this.start = {x: this.n.x, y: this.n.y};
					this.startScreen = null;
				}
			});
			newListener.setOptions(options);
			return newListener;
		}
	}


	// Styles in JS (not CSS) format (camelized, without dashes).
	obj.css = function(styles) {
		if (styles) {
			for (var i in styles) {
				if (i == 'opacity') {
//					this.style[i] = styles[i];
					this.cssOpacity(styles[i]);
				} else if (i == 'float') {
					this.cssFloat(styles[i]);
				} else {
					this.style[i] = styles[i];
				}
			}
		}
	}
	
	
	// realCss();
	// Styles in CSS (not JS) format (not camelized, with dashes).
	// 
	// Odczytyje wartosc stylu CSS z elementu nie modyfikowanego jeszcze JavaScriptem.
	// @param strCssRule : Nazwa stylu zapisana zgodnie z wzorem dla CSS (myslniki zamiast camelize'ow)
	if (document.defaultView && document.defaultView.getComputedStyle) {
		// Wersja dla normalnych przegladarek.
		obj.realCss = function(strCssRule) {
			return document.defaultView.getComputedStyle(obj, '').getPropertyValue(strCssRule);
		}
	} else if (document.body.currentStyle) {
		// Wersja dla IE.
		obj.realCss = function(strCssRule) {
			strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1) {
				return p1.toUpperCase();
			});
			return obj.currentStyle[strCssRule];
		}
	}
	
	
	obj.realCssNum = function(strCssRule) {
		var number = parseFloat(obj.realCss(strCssRule));
		if (isNaN(number)) {
			return 0;
		}
		return parseFloat(number);
	}
	
	
	obj.realWidth = function() {
		return	  obj.offsetWidth
//				- obj.realCssNum('margin-left')
//				- obj.realCssNum('margin-right')
				- obj.realCssNum('padding-left')
				- obj.realCssNum('padding-right')
				- obj.realCssNum('border-left-width')
				- obj.realCssNum('border-right-width');
	}
	
	
	obj.realHeight = function() {
		return	  obj.offsetHeight
//				- obj.realCssNum('margin-top')
//				- obj.realCssNum('margin-bottom')
				- obj.realCssNum('padding-top')
				- obj.realCssNum('padding-bottom')
				- obj.realCssNum('border-top-width')
				- obj.realCssNum('border-bottom-width');
	}
	
	obj.realBackgroundPosition = function() {
		var p = obj.realCss('background-position');
		if (p == undefined) {
			p = obj.realCss('background-position-x') + ' ' + obj.realCss('background-position-y');
		}
		return p;
	}
	
	
	obj.addClass = function(className) {
		this.className += ' ' + className;
	}
	
	
	obj.dropClass = function(className) {
		this.className = this.className.replace(new RegExp('\\b' + className + '\\b', 'g'), '');
	}
	
	
	obj.hasClass = function(className) {
		return new RegExp('\\b' + className + '\\b', 'g').test(this.className);
	}
	
	
	if (nConfig.isIE) {
		obj.cssOpacity = function(value) {
			this.style.filter = 'alpha(opacity=' + value + ')';
		}
	} else {
		obj.cssOpacity = function(value) {
			this.style.opacity = value / 100;
		}
	}
	
		
	obj.cssFloat = function(value) {
		this.style.cssFloat = value;
	}

	
	obj.config = {};
	
	obj.configure = function(config) {
		for (var i in config) {
			this.config[i] = config[i];
		}
	}
}


function nConfig() {
//	alert(navigator.userAgent);
	this.isOpera = (navigator.userAgent.indexOf('Opera') != -1);
	if (!this.isOpera && navigator.userAgent.indexOf('MSIE') != -1) {
		this.isIE = parseFloat(navigator.userAgent.replace(/.*MSIE\s*([0-9]+(\.[0-9]+)?).*/, '$1'));
	} else {
		this.isIE = false;
	}

// @todo ...
//	this.init = function() {}
//	this.init();
	this.include = function(file) {
		var script  = document.createElement('script');
		script.src  = file;
		script.type = 'text/javascript';
		script.defer = true;

		document.getElementsByTagName('head').item(0).appendChild(script);
	}
	
	this.preventSelection = function() {
		document.body.focus();
		document.onselectstart = function() { return false; }
	}
	
	this.addEvent = function(node, type, callback) {
		if (node.addEventListener) {
			node.addEventListener(type, callback, false);
		} else {
			node.attachEvent('on' + type, callback);
		}
	}
	
	this.dropEvent = function(node, type, callback) {
		if (node.removeEventListener) {
			node.removeEventListener(type, callback, false);
		} else {
			node.detachEvent('on' + type, callback);
		}
	}
	
	// @param code : string or function
	this.onLoad = function(func) {
		if (typeof(func) == 'function') {
			this.addEvent(window, 'load', func);
		}
	}
}

var nConfig = new nConfig();



// ========= "Dolar functions": ============

if (!window.$) {
	window.$ = function(id) {
		return document.getElementById(id);
	}
}


/**
 * Wyszukuje elementy o podanej klasie.
 * Jesli podano tag, wyszuka tylko elementy tych tagow.
 * Jesli podano node, bedzie szukac tylko wewnatrz tego obiektu.
 */
if (!window.$$) {
	window.$$ = function(className, tag, node) {
		if (!node) {
			node = document;
		} else if (typeof(node) != 'object') {
			node = $(node);
		}
		
		if (tag == null)
			tag = '*';
		
		var i, j = 0;
		var classElements = new Array;
		var allElements = node.getElementsByTagName(tag);
		
		for (i = 0; i < allElements.length; i++) {
			if (!className || allElements[i].className.match(new RegExp('\\b' + className + '\\b'))) {
				classElements[j] = allElements[i];
				j++;
			}
		}
		
		return classElements;
	}
}


/**
 * Wyszukuje bezposrednie elementy o podanej klasie.
 * Jesli podano tag, wyszuka tylko elementy tych tagow.
 * Jesli podano node, bedzie szukac tylko wewnatrz tego obiektu.
 * @todo : naprawic ta funkcje - teraz cos jest nie tak z rozpoznawaniem bezposrednich potomkow node'a. Interpretacja childNodes zalezy od przegladarki.
 */
if (!window.$$$) {
	window.$$$ = function(className, tag, node) {
		if (!node) {
			node = document;
		} else if (typeof(node) != 'object') {
			node = $(node);
		}
		
		if (!tag || tag == '*')
			tag = '';
			
		tag = tag.toLowerCase();
		
		var nodes = new Array;
		
		for (var i in node.childNodes) {
			if (nConfig.isOpera && node.childNodes[i].parentNode != node) {
				break;
			}
			
			if (node.childNodes[i].nodeType == 1) {
				if (!className || (node.childNodes[i].className && node.childNodes[i].className.match(new RegExp('\\b' + className + '\\b')))) {
					if (!tag || node.childNodes[i].tagName.toLowerCase() == tag) {
						nodes.push(node.childNodes[i]);
					}
				}
			}
		}

		return nodes;
	}
}

/**
 * nic nie robi
 */
function nev2006() {}
/* $$$ JS file: nDynamic/nDynamicAction.js: */
if (!window.nDynamic) alert('Require nDynamic library.');

/**
 * Callbacks order:
 * 		public		onInitialize
 * 		protected	beforeActivate
 * 		public		onActivate
 * 		public	{	onLoop
 *		protected	onEndDetection
 * 		public		onUpdate	}
 * 		public 		onDeactivate
 */
function nAction(options) {
	this.nName = 'nAction';

	this.setOptions = function(options) {
		if (options) {
			// Ustawianie konfiguracji:
			for (option in options) {
				this[option] = options[option];
			}
		}
	}
	
	this.activate = function(options) {
		nActionLoop.enqueueAction(this);
		if (this.beforeActivate) {
			this.beforeActivate(options); // @todo : sprawdzic, czy to moze byc przed enqueueAction i przeniesc
		}
		if (this.onActivate) {
			this.onActivate(options);
		}
		return this;
	}
	
	this.deactivate = function() {
		// @todo : dodac w tym miejscu beforeDeactivate();
		nActionLoop.dequeueAction(this);
		if (this.onDeactivate) {
			this.onDeactivate();
		}
		if (onThan) {
			onThan();
		}
		return this; // @todo : czy to potrzebne?
	}
	
	var onThan = null;
	this.than = function(func) {
		onThan = function() {
			func();
			onThan = null;
		}
	}
	
	this.run = function() {
		if (this.onLoop) {
			this.onLoop();
		}
		if (this.onEndDetection) {
			this.onEndDetection();
		}
		if (this.onUpdate) {
			this.onUpdate();
		}
	}
	
	this.beforeActivate = function() {
		this.detectDirection();
	}
	
	this.onEndDetection = function() {
		if (this.isEnd()) {
			this.deactivate();
		}
	}
	
	
	// konstruktor {
		// public
		this.start = 0;
		this.end = 10;
		this.factor = 0.1;
		// private
		this.direction = 1;
		this.n = this.start;
		
		this.setOptions(options);
		this.actionId = nActionLoop.registerActionId();
		
		if (typeof this.onInitialize == 'function') {
			this.onInitialize();
		}
	// }
	
	
	
	this.detectDirection = function() {
		this.direction = (this.start <= this.end) * 2 - 1;
	}

	
	this.isEnd = function() {
		return (this.n * this.direction >= this.end * this.direction);
	}
	
	
	/**
	 * Ruch jednostajnie opozniony.
	 * Wartosc zalezy od faktora i od dystantu.
	 */
	this.decelerate = function() {
		this.n += Math.ceil(this.direction * (this.end - this.n) * this.factor) * this.direction;
	}
	
	
	/**
	 * Ruch jednostajnie przyspieszony.
	 * Wartosc przyspiszenia zalezy tylko od faktora.
	 */
	this.accelerate = function() {
		this.n += (Math.ceil((this.n - this.start) * this.factor) || this.direction);
	}
	
	
	/**
	 * Ruch jednostajny.
	 * Predkosc zalezy tylko od factora.
	 */
	this.uniform = function() {
		this.n += (Math.ceil(this.factor * 100 * this.direction) || this.direction);
	}
	
	
	/**
	 * Ruch jednostajny.
	 * Predkosc zalezy od factora i od DYSTANSU. Im wiekszy dystans pomiedzy start i end, tym wieksza predkosc.
	 */
	this.distantional = function() {
		this.n += (Math.ceil(this.factor / 10 * (this.end - this.start)) || this.direction);
	}
	

	/**
	 * Ruch zalezny.
	 * Predkosc ruchu zalezy od predkosci ruchu akcji, od ktorej biezaca akcja jest zalezna.
	 * @todo : Dodac do wzoru "direction". Zoptymalizowac.
	 */
	this.depended = function(affectingAction) {
		this.n = Math.ceil((this.end - this.start) / (affectingAction.end - affectingAction.start) * (affectingAction.n - affectingAction.start)) + this.start || this.direction;
//		alert(((this.end - this.start)) + '/' + (affectingAction.end - affectingAction.start) + '*' +  (affectingAction.n - affectingAction.start) + '=' + this.n);
	}
	
	return this;
}


/**
 * Passive animation loop.
 *
 * ====== API: ======
 *
 * Public:
 * 		start([fps])			: Initialize and enable animations (if already started, method executes stop() before start()).
 * 		stop()				: Disable animations and clear actions queue.
 *
 * Protected:
 *		sleep()				: Suspend animations (faster than stop(); does not clear the queue).
 *		wake()				: Unsuspend animations (faster than start()).
 *		nName				: nDynamic object category.
 *
 * Private:
 *		registerActionId()
 *		enqueueAction(action)
 *		dequeueAction(action)
 * 		frame()
 */
function nActionLoop() {
	this.nName = 'nActionLoop';
	
	var frameRate = 25; // frames interval in miliseconds
	var actionAutoIncrement = 0;
	var queue = new Array;
	this.loop = null;


	// Rejestruje akcje = przydziela jej identyfikator, niezbedny do dalszej pracy z akcja.
	this.registerActionId = function() {
		return actionAutoIncrement++;
	}
	
	this.enqueueAction = function(action) {
		queue[action.actionId] = action;
		if (this.loop == null) this.wake();
	}
	
	this.dequeueAction = function(action) {
		queue[action.actionId] = null;
	}
	
	// Initialize loop.
	this.start = function(fps) {
		if (this.loop) {
			this.stop();
		}
		
		if (fps) {
			frameRate = Math.round(1000/fps);
		}
		
		this.wake();
	}

	// Wake up loop.
	this.wake = function() {
		this.loop =	setInterval(
			function() {
				nActionLoop.frame();
			},
			frameRate);
	}
	
	// Stop loop and clear queue.
	this.stop = function() {
		this.sleep();
		this.clearQueue();
	}
	
	// Asleep loop.
	this.sleep = function() {
		clearInterval(this.loop);
		this.loop = null;
	}
	
	this.clearQueue = function() {
		var queueLength = queue.length;
		for (var i in queue) {
			delete queue[i];
		}
	}
	

	// Execute all enqueued actions "frameRate" times per second.
	this.frame = function() {
		// @todo : zoptymalizowac przez uzycie listy zamiast tablicy akcji
		var amount = 0;
		for (var id in queue) {
			if (queue[id]) {
				queue[id].run();
				amount++;
			}
		}
		if (amount == 0) this.sleep();	// @todo : Czy w tym miejscu kolejka tez nie powinna byc czyszczona? (stop() zamiast sleep()).
	}
}

var nActionLoop = new nActionLoop();
/* $$$ JS file: nDynamic/nDynamicListener.js: */
if (!window.nDynamic) alert('Require nDynamic library.');

/**
 * Interactive animation loop.
 *
 * Callbacks order:
 * 		public		onInitialize
 * 		protected	onAddEvent
 * 		protected	beforeActivate
 * 		public		onActivate
 * 		public	{	onLoop
 * 		public		onUpdate	}
 * 		public 		onDeactivate
 * 		protected	onDropEvent
 * 		protected	afterDeactivate
 */
function nListener(options) {
	this.nName = 'nListener';
	
	this.setOptions = function(options) {
		if (options) {
			// Ustawianie konfiguracji:
			for (option in options) {
				this[option] = options[option];
			}
		}
	}
	
	this.activate = function(options) {
		activateOptions = options;
		active = false;

		this.onAddEvent();
	}
	
	this.onAddEvent = function() {
		nConfig.addEvent(this.activator, this.eventType, this.run);
	}
	
	this.deactivate = function() {
		if (this.onDeactivate) {
			this.onDeactivate();
		}
		
		this.onDropEvent();
		active = false;
		activateOptions = null;
		
		if (this.afterDeactivate) {
			this.afterDeactivate();
		}
		
		return this; // @todo : czy to potrzebne?
	}
	
	this.onDropEvent = function() {
		nConfig.dropEvent(this.activator, this.eventType, this.run);
	}
	
	this.run = function(e) {
		listener.event = e || window.event;
		
		if (active == false) {
			active = true;
			if (listener.beforeActivate) {
				listener.beforeActivate();
			}
			if (listener.onActivate) {
				listener.onActivate(activateOptions);
			}
		}
		
		if (active == true) {
			if (listener.onLoop) {
				listener.onLoop();
			}
			
			if (listener.onUpdate) {
				listener.onUpdate();
			}
		}
	}
	
	// konstruktor {
		var listener = this;
		var active = false;
		var activateOptions = null;
		
		this.eventType = 'mousemove';
		this.activator = document;

		this.event = null;
		this.setOptions(options);
		
		if (this.onInitialize) {
			this.onInitialize();
		}
	// }
	
	
	// For use in onLoop:
	this.offset = function() {
		if (this.event.offsetX != undefined) {
			return {x: this.event.offsetX, y: this.event.offsetY};
		} else {
			return {x: this.event.layerX, y: this.event.layerY};
		}
	}
	
	return this;
}

nConfig.addEvent = function(node, type, callback) {
	if (node.addEventListener) {
		node.addEventListener(type, callback, false);
	} else {
		node.attachEvent('on' + type, callback);
	}
}

nConfig.dropEvent = function(node, type, callback) {
	if (node.removeEventListener) {
		node.removeEventListener(type, callback, false);
	} else {
		node.detachEvent('on' + type, callback);
	}
}


function nDragNDrop(obj, autoInit, options) {
	nDynamic(obj);
	obj.nName = 'nDragNDrop';
	
	obj.dragging = obj.point({
		onUpdate:function() {
			this.obj.style.marginLeft = this.n.x + 'px';
			this.obj.style.marginTop = this.n.y + 'px';
		}
	});
	
	obj.drag = function() {
		this.dragging.activate();
		nConfig.addEvent(document, 'mouseup', obj.drop);
	}
	
	obj.drop = function() {
		obj.dragging.deactivate();
	}
	
	if (options) {
		obj.dragging.setOptions(options);
	}
	
	if (autoInit) {
		obj.onmousedown = obj.drag;
	}
}
/* $$$ JS file: nDynamic/nInputDescribed.js: */
function nInputDescribed(obj, description, classDefault, classChanged) {
	nDynamic(obj);
	obj.nName = 'nInputDescribed';
	
	obj.configure({
		description: description,
		classDefault: classDefault,
		classChanged: classChanged
	});

	obj._focus = function() {
		if (obj.isEmpty()) {
			obj.value = '';
			obj.dropClass(obj.config.classDefault);
			obj.addClass(obj.config.classChanged);
		}
	}

	obj._blur = function() {
		if (obj.isEmpty()) {
			obj.value = obj.config.description;
			obj.dropClass(obj.config.classChanged);
			obj.addClass(obj.config.classDefault);
		}
	}
	
	obj.isEmpty = function() {
		return (obj.value == obj.config.description || obj.value.search('^[\\s\\t\\n\\r]*$') >= 0);
	}
	
	nConfig.addEvent(obj, 'focus', obj._focus);
	nConfig.addEvent(obj, 'blur', obj._blur);
}
/* $$$ JS file: nDynamic/nDynamicMorpher.js: */
function nMorpher() {
	
	this.toggle = function(obj, options) {
		obj.blur();
		if (!isMorphable(obj)) {
			this.morphable(obj, options);
		}
		return obj.toggle();
	}
	
	isMorphable = function(obj) {
		if (obj.wrapper && obj.wrapper.nName == 'nMorpherWrapper') {
			return true;
		}
		return false;
	}
	
	
	/**
	 * @param object[optional] options : Available options:
	 *	- axis
	 *	- closedValue
	 *	- unit
	 *	- useDisplayNone
	 *	- beginOpen
	 *	- factor
	 *	- outerBorder
	 */
	this.morphable = function(obj, options) {
		nDynamic(obj);
		obj.nName = 'nMorphable';

		obj.configure({
			axis:				'height', // 'width' or 'height'
			closedValue:		0,
			unit:				'px',
			useDisplayNone:	(options && options.closedValue)? false : true,
			beginOpen:		(obj.realCss('display') == 'none')? false : true,
			factor:				0.2,
			outerBorder:		false
		});
		
		if (options) obj.configure(options);
		
		wrapper = document.createElement('div');
		obj.parentNode.insertBefore(wrapper, obj);
		wrapper.appendChild(obj);
		obj.wrapper = wrapper;
		
		nDynamic(obj.wrapper);
		obj.wrapper.nName = 'nMorpherWrapper';

		obj.originalCss = {};
		// Nadanie stylu wrapperowi, bazujac na stylach dotyczacych zewnetrznych wlasciwosci obj'ta.
		obj.originalCss.display = obj.realCss('display');
		obj.style.display = obj.workDisplay = (obj.originalCss.display == 'none') ? 'block' : obj.originalCss.display;
		
		obj.originalCss.width = obj.offsetWidth;
		obj.originalCss.height = obj.offsetHeight;
		obj.originalCss.position = obj.realCss('position');

		obj.wrapper.css({
			overflow:		'hidden',
			zIndex:		obj.realCss('z-index'),
			display:		obj.config.useDisplayNone ? obj.originalCss.display : obj.workDisplay,
			'float':			obj.realCss('float'),
			position:		obj.originalCss.position,//nConfig.isOpera && obj.originalCss.position == 'relative' ? 'static' : obj.originalCss.position,
			width:			obj.originalCss.width + obj.config.unit,
			height:			obj.originalCss.height + obj.config.unit,
			marginLeft:	obj.realCss('margin-left'),
			marginRight:	obj.realCss('margin-right'),
			marginTop:	obj.realCss('margin-top'),
			marginBottom:	obj.realCss('margin-bottom')
			
//			left:			obj.realCss('left'),
//			top:			obj.realCss('top')
		});
		
		if (!obj.config.beginOpen) obj.wrapper.style[obj.config.axis] = obj.config.closedValue + obj.config.unit;
		
		// Wyzerowanie zewnetrznych stylow obj'ta.
		obj.css({
			position:		'static',
			left:			0,
			top:			0,
			margin:		0,
			'float':			'none',
			display:		obj.workDisplay
		});
		
		if (obj.config.outerBorder) {
			obj.wrapper.css({
				borderLeftStyle:		obj.realCss('border-left-style'),
				borderRightStyle:		obj.realCss('border-right-style'),
				borderTopStyle:		obj.realCss('border-top-style'),
				borderBottomStyle:	obj.realCss('border-bottom-style'),
				
				borderLeftWidth:		obj.realCss('border-left-width'),
				borderRightWidth:		obj.realCss('border-right-width'),
				borderTopWidth:		obj.realCss('border-top-width'),
				borderBottomWidth:	obj.realCss('border-bottom-width'),
				
				borderLeftColor:		obj.realCss('border-left-style-color'),
				borderRightColor:		obj.realCss('border-right-color'),
				borderTopColor:		obj.realCss('border-top-color'),
				borderBottomColor:	obj.realCss('border-bottom-color')
			});
			obj.style.border = 0;
		}
		
		// @todo : Ponizszy warunek powinien wykrywac, czy w arkuszu stylow podano top i left
		if (!nConfig.isOpera || obj.style.position != 'relative') {
//				alert(obj.realCssNum('top') + ' = ' + obj.offsetTop + ' = ' + obj.style.top);
			obj.wrapper.style.left = obj.realCss('left');
			obj.wrapper.style.top = obj.realCss('top');
		}


		obj.wrapper.buildSlider = function(axis) {
			if (!obj.wrapper.slider) obj.wrapper.slider = {};
			
			obj.wrapper.slider[axis] = obj.wrapper.motion({
				factor:		obj.config.factor,
				n:			obj.config.beginOpen? obj.originalCss[axis] : obj.config.closedValue,
				opened:	obj.config.beginOpen,

				onInitialize:function() {
					obj.workDisplay = this.obj.style.display = 'block';
				},
				onUpdate:function() {
					this.obj.style[axis] = this.n + obj.config.unit;
				},
				toggle:function() {
					this.activate(this.opened? obj.config.closedValue : obj.originalCss[axis]);
					this.opened = !this.opened;
				}
			});
		
			if (obj.config.useDisplayNone) {
				obj.wrapper.slider[axis].onActivate = function() {
					if (!this.opened) {
						this.obj.style.display = 'block';
					}
				}
				
				obj.wrapper.slider[axis].onDeactivate = function() {
					if (!this.opened) {
						this.obj.style.display = 'none';
					}
				}
			}
		}
		
		obj.wrapper.buildSlider(obj.config.axis);
			
		obj.toggle = function() {
			obj.wrapper.slider[obj.config.axis].toggle();
			return false;
		}
	}
}


var nMorpher = new nMorpher();
/* $$$ JS file: voteArrowLabel.js: */
function voteArrowLabel(obj, targetInput) {
	
	if (typeof obj == 'string') {
		obj = $(obj);
	}
	
	if (typeof targetInput == 'string') {
		obj.targetInput = $(targetInput);
	}

	obj.setTarget = function(logFormTarget) {
		obj.targetInput.value = logFormTarget;
	}

	obj.displayIn = function(parentElement, logFormTarget) {
		parentElement.appendChild(obj);
		obj.setTarget(logFormTarget);
		obj.show();
		return false;
	}
		
	obj.show = function() {
		obj.style.visibility = 'visible';
	}
	
	obj.hide = function() {
		obj.style.visibility = 'hidden';
	}
	
	return obj;
}
/* $$$ JS file: ajax/advAJAX.js: */
/*
 * AdvancedAJAX 1.1.2
 * (c) 2005-2006 Lukasz Lach
 *  mail: anakin@php5.pl
 *  www:  http://advajax.anakin.us/
 *        http://anakin.us/
 * http://creativecommons.org/licenses/LGPL/2.1/
 *
 */

function advAJAX() {

    var obj = new Object();

    obj.url = window.location.href;
    obj.method = "GET";
    obj.parameters = new Object();
    obj.jsonParameters = new Object();
    obj.headers = new Object();
    obj.async = true;
    obj.mimeType = "text/xml";
    obj.username = null;
    obj.password = null;
    obj.form = null;
    obj.disableForm = true;

    obj.unique = true;
    obj.uniqueParameter = "_uniqid";

    obj.requestDone = false;
    obj.queryString = "";
    obj.responseText = null;
    obj.responseXML = null;
    obj.status = null;
    obj.statusText = null;
    obj.aborted = false;
    obj.timeout = 0;
    obj.retryCount = 0;
    obj.retryDelay = 1000;
    obj.tag = null;
    obj.group = null;
    obj.progressTimerInterval = 50;

    obj.xmlHttpRequest = null;

    obj.onInitialization = null;
    obj.onFinalization = null;
    obj.onReadyStateChange = null;
    obj.onLoading = null;
    obj.onLoaded = null;
    obj.onInteractive = null;
    obj.onComplete = null;
    obj.onProgress = null;
    obj.onSuccess = null;
    obj.onFatalError = null;
    obj.onError = null;
    obj.onTimeout = null;
    obj.onRetryDelay = null;
    obj.onRetry = null;
    obj.onGroupEnter = null;
    obj.onGroupLeave = null;

    obj.createXmlHttpRequest = function() {

        if (typeof XMLHttpRequest != "undefined")
            return new XMLHttpRequest();
        var xhrVersion = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
                "MSXML2.XMLHttp","Microsoft.XMLHttp" ];
        for (var i = 0; i < xhrVersion.length; i++) {
            try {
                var xhrObj = new ActiveXObject(xhrVersion[i]);
                return xhrObj;
            } catch (e) { }
        }
        obj.raiseEvent("FatalError");
        return null;
    };

    obj._oldResponseLength = null;
    obj._progressTimer = null;
    obj._progressStarted = navigator.userAgent.indexOf('Opera') == -1;
    obj._onProgress = function() {

        if (typeof obj.onProgress == "function" &&
            typeof obj.xmlHttpRequest.getResponseHeader == "function") {
            var contentLength = obj.xmlHttpRequest.getResponseHeader("Content-length");
            if (contentLength != null && contentLength != '') {
                var responseLength = obj.xmlHttpRequest.responseText.length;
                if (responseLength != obj._oldResponseLength) {
                    obj.raiseEvent("Progress", obj, responseLength, contentLength);
                    obj._oldResponseLength = obj.xmlHttpRequest.responseText.length;
                }
            }
        }
        if (obj._progressStarted) return;
        obj._progressStarted = true;
        var _obj = this;
        this.__onProgress = function() {
            obj._onProgress();
            obj._progressTimer = window.setTimeout(_obj.__onProgress, obj.progressTimerInterval);
        }
        _obj.__onProgress();
    }

    obj._onInitializationHandled = false;
    obj._initObject = function() {

        if (obj.xmlHttpRequest != null) {
            delete obj.xmlHttpRequest["onreadystatechange"];
            obj.xmlHttpRequest = null;
        }
        if ((obj.xmlHttpRequest = obj.createXmlHttpRequest()) == null)
            return null;
        if (typeof obj.xmlHttpRequest.overrideMimeType != "undefined")
            obj.xmlHttpRequest.overrideMimeType(obj.mimeType);
        obj.xmlHttpRequest.onreadystatechange = function() {

            if (obj == null || obj.xmlHttpRequest == null)
                return;
            obj.raiseEvent("ReadyStateChange", obj, obj.xmlHttpRequest.readyState);
            obj._onProgress();
            switch (obj.xmlHttpRequest.readyState) {
                case 1: obj._onLoading(); break;
                case 2: obj._onLoaded(); break;
                case 3: obj._onInteractive(); break;
                case 4: obj._onComplete(); break;
            }
        };
        obj._onLoadingHandled =
            obj._onLoadedHandled =
            obj._onInteractiveHandled =
            obj._onCompleteHandled = false;
    };

    obj._onLoading = function() {

        if (obj._onLoadingHandled)
            return;
        if (!obj._retry && obj.group != null) {
            if (typeof advAJAX._groupData[obj.group] == "undefined")
                advAJAX._groupData[obj.group] = 0;
            advAJAX._groupData[obj.group]++;
            if (typeof obj.onGroupEnter == "function" && advAJAX._groupData[obj.group] == 1)
                obj.onGroupEnter(obj);
        }
        obj.raiseEvent("Loading", obj);
        obj._onLoadingHandled = true;
    };
    obj._onLoaded = function() {

        if (obj._onLoadedHandled)
            return;
        obj.raiseEvent("Loaded", obj);
        obj._onLoadedHandled = true;
    };
    obj._onInteractive = function() {

        if (obj._onInteractiveHandled)
            return;
        obj.raiseEvent("Interactive", obj);
        obj._onInteractiveHandled = true;
        if (!obj._progressStarted)
            obj._onProgress();
    };
    obj._onComplete = function() {

        if (obj._onCompleteHandled || obj.aborted)
            return;
        if (obj._progressStarted) {
            window.clearInterval(obj._progressTimer);
            obj._progressStarted = false;
        }
        obj.requestDone = true;
        with (obj.xmlHttpRequest) {
            obj.responseText = responseText;
            obj.responseXML = responseXML;
            if (typeof status != "undefined")
                obj.status = status;
            if (typeof statusText != "undefined")
                obj.statusText = statusText;
        }
        obj.raiseEvent("Complete", obj);
        obj._onCompleteHandled = true;
        if (obj.status == 200)
            obj.raiseEvent("Success", obj); else
            obj.raiseEvent("Error", obj);
        delete obj.xmlHttpRequest['onreadystatechange'];
        obj.xmlHttpRequest = null;
        if (obj.disableForm)
            obj.switchForm(true);
        obj._groupLeave();
        obj.raiseEvent("Finalization", obj);
    };

    obj._groupLeave = function() {

        if (obj.group != null) {
            advAJAX._groupData[obj.group]--;
            if (advAJAX._groupData[obj.group] == 0)
                obj.raiseEvent("GroupLeave", obj);
        }
    };

    obj._retry = false;
    obj._retryNo = 0;
    obj._onTimeout = function() {

        if (obj == null || obj.xmlHttpRequest == null || obj._onCompleteHandled)
            return;
        obj.aborted = true;
        obj.xmlHttpRequest.abort();
        obj.raiseEvent("Timeout", obj);
        obj._retry = true;
        if (obj._retryNo != obj.retryCount) {
            obj._initObject();
            if (obj.retryDelay > 0) {
                obj.raiseEvent("RetryDelay", obj);
                startTime = new Date().getTime();
                while (new Date().getTime() - startTime < obj.retryDelay);
            }
            obj._retryNo++;
            obj.raiseEvent("Retry", obj, obj._retryNo);
            obj.run();
        } else {
            delete obj.xmlHttpRequest["onreadystatechange"];
            obj.xmlHttpRequest = null;
            if (obj.disableForm)
                obj.switchForm(true);
            obj._groupLeave();
            obj.raiseEvent("Finalization", obj);
        }
    };

    obj.run = function() {

        obj._initObject();
        if (obj.xmlHttpRequest == null)
            return false;
        obj.aborted = false;
        if (!obj._onInitializationHandled) {
            obj.raiseEvent("Initialization", obj);
            obj._onInitializationHandled = true;
        }
        if (obj.method == "GET" && obj.unique)
            obj.parameters[encodeURIComponent(obj.uniqueParameter)] =
            new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString();
        if (!obj._retry) {
            for (var a in obj.parameters) {
                if (obj.queryString.length > 0)
                    obj.queryString += "&";
                if (typeof obj.parameters[a] != "object")
                    obj.queryString += encodeURIComponent(a) + "=" + encodeURIComponent(obj.parameters[a]); else {
                    for (var i = 0; i < obj.parameters[a].length; i++)
                        obj.queryString += encodeURIComponent(a) + "=" + encodeURIComponent(obj.parameters[a][i]) + "&";
                    obj.queryString = obj.queryString.slice(0, -1);
                }
            }
            for (var a in obj.jsonParameters) {
                var useJson = typeof [].toJSONString == 'function';
                if (obj.queryString.length > 0)
                    obj.queryString += "&";
                obj.queryString += encodeURIComponent(a) + "=";
                if (useJson)
                    obj.queryString += encodeURIComponent(obj.jsonParameters[a].toJSONString()); else
                    obj.queryString += encodeURIComponent(obj.jsonParameters[a]);
            }
            if (obj.method == "GET" && obj.queryString.length > 0)
                obj.url += (obj.url.indexOf("?") != -1 ? "&" : "?") + obj.queryString;
        }
        if (obj.disableForm)
            obj.switchForm(false);
        try {
            obj.xmlHttpRequest.open(obj.method, obj.url, obj.async, obj.username || '', obj.password || '');
        } catch (e) {
            obj.raiseEvent("FatalError", obj, e);
            return;
        }
        if (obj.timeout > 0)
            setTimeout(obj._onTimeout, obj.timeout);
        if (typeof obj.xmlHttpRequest.setRequestHeader != "undefined")
            for (var a in obj.headers)
                obj.xmlHttpRequest.setRequestHeader(encodeURIComponent(a), encodeURIComponent(obj.headers[a]));
        if (obj.method == "POST" && typeof obj.xmlHttpRequest.setRequestHeader != "undefined") {
            obj.xmlHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            obj.xmlHttpRequest.send(obj.queryString);
        } else if (obj.method == "GET")
            obj.xmlHttpRequest.send('');
    };

    obj.handleArguments = function(args) {

        if (typeof args.form == "object" && args.form != null) {
            obj.form = args.form;
            obj.appendForm();
        }
        for (a in args) {
            if (typeof obj[a] == "undefined")
                obj.parameters[a] = args[a]; else {
                if (a != "parameters" && a != "headers")
                    obj[a] = args[a]; else
                    for (b in args[a])
                        obj[a][b] = args[a][b];
            }
        }
        obj.method = obj.method.toUpperCase();
    };

    obj.switchForm = function(enable) {

        if (typeof obj.form != "object" || obj.form == null)
            return;
        with (obj.form)
            for (var nr = 0; nr < elements.length; nr++)
                if (!enable) {
                    if (elements[nr]["disabled"])
                        elements[nr]["_disabled"] = true; else
                        elements[nr]["disabled"] = "disabled";
                } else
                    if (typeof elements[nr]["_disabled"] == "undefined")
                        elements[nr].removeAttribute("disabled");
    };

    obj.appendForm = function() {

        with (obj.form) {
            obj.method = getAttribute("method").toUpperCase();
            obj.url = getAttribute("action");
            for (var nr = 0; nr < elements.length; nr++) {
                var e = elements[nr];
                if (e.disabled)
                    continue;
                switch (e.type) {
                    case "text":
                    case "password":
                    case "hidden":
                    case "textarea":
                        obj.addParameter(e.name, e.value);
                        break;
                    case "select-one":
                        if (e.selectedIndex >= 0)
                            obj.addParameter(e.name, e.options[e.selectedIndex].value);
                        break;
                    case "select-multiple":
                        for (var nr2 = 0; nr2 < e.options.length; nr2++)
                            if (e.options[nr2].selected)
                                obj.addParameter(e.name, e.options[nr2].value);
                        break;
                    case "checkbox":
                    case "radio":
                        if (e.checked)
                            obj.addParameter(e.name, e.value);
                        break;
                }
            }
        }
    };

    obj.addParameter = function(name, value) {
        if (typeof obj.parameters[name] == "undefined")
            obj.parameters[name] = value; else
        if (typeof obj.parameters[name] != "object")
            obj.parameters[name] = [ obj.parameters[name], value ]; else
        obj.parameters[name][obj.parameters[name].length] = value;
    };
    obj.delParameter = function(name) {

        delete obj.parameters[name];
    };
    obj.raiseEvent = function(name) {
        var args = [];
        for (var i = 1; i < arguments.length; i++)
            args.push(arguments[i]);
        if (typeof obj["on" + name] == "function")
            obj["on" + name].apply(null, args);
        if (name == "FatalError")
            obj.raiseEvent("Finalization", obj);
    }

    if (typeof advAJAX._defaultParameters != "undefined")
        obj.handleArguments(advAJAX._defaultParameters);
    return obj;
}

advAJAX.get = function(args) {

    return advAJAX.handleRequest("GET", args);
};

advAJAX.post = function(args) {

    return advAJAX.handleRequest("POST", args);
};

advAJAX.head = function(args) {

    return advAJAX.handleRequest("HEAD", args);
};

advAJAX.submit = function(form, args) {

    if (typeof args == "undefined" || args == null)
        return -1;
    if (typeof form != "object" || form == null)
        return -2;
    var request = new advAJAX();
    args["form"] = form;
    request.handleArguments(args);
    return request.run();
};

advAJAX.assign = function(form, args) {

    if (typeof args == "undefined" || args == null)
        return -1;
    if (typeof form != "object" || form == null)
        return -2;
    if (typeof form["onsubmit"] == "function")
        form["_onsubmit"] = form["onsubmit"];
    form["advajax_args"] = args;
    form["onsubmit"] = function() {
        if (typeof this["_onsubmit"] != "undefined" && this["_onsubmit"]() === false)
            return false;
        if (advAJAX.submit(this, this["advajax_args"]) == false)
            return true;
        return false;
    }
    return true;
};

advAJAX.download = function(targetObj, url) {

    if (typeof targetObj == "string")
        targetObj = document.getElementById(targetObj);
    if (!targetObj)
        return -1;
    advAJAX.get({
        url: url,
        onSuccess : function(obj) {
            targetObj.innerHTML = obj.responseText;
        }
    });
};

advAJAX.scan = function() {

    var obj = document.getElementsByTagName("a");
    for (var i = 0; i < obj.length;) {
        if (obj[i].getAttribute("rel") == "advancedajax" && obj[i].getAttribute("href") !== null) {
            var url = obj[i].getAttribute("href");
            var div = document.createElement("div");
            div.innerHTML = obj[i].innerHTML;
            div.className = obj[i].className;
            var parent = obj[i].parentNode;
            parent.insertBefore(div, obj[i]);
            parent.removeChild(obj[i]);
            advAJAX.download(div, url);
        } else i++;
    }
};

advAJAX.handleRequest = function(requestType, args) {

    if (typeof args == "undefined" || args == null)
        return -1;
    var request = new advAJAX();
    window.advajax_obj = request;
    request.method = requestType;
    request.handleArguments(args);
    return request.run();
};

advAJAX._defaultParameters = new Object();
advAJAX.setDefaultParameters = function(args) {

    advAJAX._defaultParameters = new Object();
    for (a in args)
        advAJAX._defaultParameters[a] = args[a];
};

advAJAX._groupData = new Object();
/* $$$ JS file: ajax/ajax.js: */
/**
 * AJAX support for ConfigLevel framework.
 * Based on Advanced AJAX by Anakin (reference url: http://advajax.anakin.us).
 *
 * Standard AJAX options:
 * 		capturePhpErrors = true
 * 		capturePhpInfos = true
 * 		onPhpError = null
 * 		evalScripts = false
 * 		loaderTo = null
 * 		update = null
 * 		method = post
 *		uploadImages = false
 *
 *		+ all options available in advAJAX
 */

function ajax() {
	
	var ajax = this;
	ajax.requestCounter = 0;
	
	ajax.request = function(url, options) {
		if (!options) options = new Object;
		options = rewriteOptions(url, options);
		return advAJAX.handleRequest(options.method, options);
	}

	function rewriteOptions(url, options) {
		if (!options) options = new Object;

		// Informuje, ze wywolanie zostalo wykonane przez AJAXa.
		options.ajaxCall = true;
		
		options.onCompletes = new Array;
		options.onSuccesses = new Array;
		
		options.url = url;
		options.requestId = ajax.requestCounter++;
		
		if (options.update) {
			if (typeof(options.update) == 'string') {
				options.update = $(options.update);
			}
			if (!options.update) {
				alert('No DOM element "' + options.update + '".');
			}
			options.update.expectingRequestId = options.requestId;
		}
		
		if (options.capturePhpMsgs) {
			options.capturePhpErrors = true;
			options.capturePhpInfos = true;
		}
		
		if (options.onPhpError) {
			options.capturePhpErrors = true;
		}
		
		if (options.capturePhpErrors) {
			options.onCompletes.push(function(request) {
				if (request.phpError = ajax.capturePhpErrors(request.responseText)) {
					if (options.onPhpError) {
						options.onPhpError(request);
					}
				}
			});
		}
		
		if (options.loaderTo) {
			if (options.loaderTo = (typeof(options.loaderTo) == 'string')? $(options.loaderTo) : options.loaderTo) {
				if (options.loaderTo.loaderObj) {
					ajax.removeLoaderObj(options.loaderTo);
				}
				options.loaderTo.loaderObj = document.createElement('div');
				options.loaderTo.insertBefore(options.loaderTo.loaderObj, options.loaderTo.firstChild);
				options.loaderTo.loaderObj.className = 'ajaxLoaderClock';
				
				options.onCompletes.push(function(request) {
					ajax.removeLoaderObj(options.loaderTo);
				});
			}
		}
		
		if (options.update) {
			options.onCompletes.push(function(request) {
				if (options.update.expectingRequestId != null && options.update.expectingRequestId <= options.requestId) {
					options.update.innerHTML = request.responseText;
				}
			});
		}
		
		if (options.capturePhpInfos) {
			options.onSuccesses.push(function(request) {
				request.phpInfo = ajax.capturePhpInfos(request.responseText);
			});
		}
		
		if (options.evalScripts) {
			options.onSuccesses.push(function(request) {
				ajax.evalScripts(request.responseText);
			});
		}
		
		if (options.method) {
			options.method.toUpperCase();
		} else {
			options.method = 'POST';
		}
		
		if (options.onComplete) {
			options.onCompletes.push(options.onComplete);
		}
		
		options.onComplete = function(request) {
			for (var i in options.onCompletes) {
				if (typeof(options.onCompletes[i]) == 'function') {
					options.onCompletes[i](request);
				}
			}
		}
		
		if (options.onSuccess) {
			options.onSuccesses.push(options.onSuccess);
		}
		
		options.onSuccess = function(request) {
			if (!request.phpError) {
				for (var i in options.onSuccesses) {
					if (typeof(options.onSuccesses[i]) == 'function') {
						options.onSuccesses[i](request);
					}
				}
			}
		}
		
		return options;
	}


	ajax.removeLoaderObj = function(loaderContainer) {
		if (loaderContainer && loaderContainer.loaderObj) {
			if (loaderContainer.loaderObj.parentNode) {
				loaderContainer.loaderObj.style.backgroundImage = 'none';
				loaderContainer.removeChild(loaderContainer.loaderObj);
			}
			loaderContainer.loaderObj = null;
			loaderContainer = null;
		}
	}


	ajax.update = function(update, url, options) {
		if (!options) options = new Object;
		options.update = update;
		if (options.evalScripts == undefined) {
			options.evalScripts = true;
		}
		ajax.request(url, options);
		
		return false;
	}

	
	/* Wykonuje submit formularza.
	 * Wysyla go pod adres zawarty w jego atrybucie 'action'.
	 * Jesli zostanie podana opcja 'url', ten adres bedzie uzyty zamiast 'action'.
	 * @return false
	 */
	ajax.submit = function(formObj, options) {
		if (typeof(formObj) == 'string') {
			formObj = $(formObj);
		}

		if (typeof(formObj) == 'object') {
			if (!options) options = new Object;
			if (options.url) {
				options = rewriteOptions(options.url, options);
			} else {
				options = rewriteOptions(formObj.action, options);
			}
			
			if (!options.uploadImages) {
				advAJAX.submit(formObj, options);
			} else if (AIM && typeof(AIM) == 'object') {
				if (!options.url) options.url = formObj.action;
				ajax.overwriteFormOptions(formObj, options.url + ((options.url.indexOf('?') >= 0)? '&' : '?') + 'ajaxCall=1');
				if (AIM.submit(formObj, {
					onStart: options.onLoading,
					onComplete: function(response) {
						ajax.revertFormOptions(formObj);
						if (options.onComplete) {
							options.onComplete({responseText: response, status: 200});
						}
					}
				})) {
					return true;
				} else {
					ajax.revertFormOptions(formObj);
				}
			}
		}
		return false;
	}
	
	ajax.overwriteFormOptions = function(formObj, url) {
		formObj.originalAction = formObj.action;
		formObj.action = url;
		formObj.originalTarget = formObj.target;
	}
	
	ajax.revertFormOptions = function(formObj) {
		if (formObj.originalAction !== undefined) {
			formObj.action = formObj.originalAction;
			formObj.originalAction = undefined;
			formObj.target = formObj.originalTarget;
			formObj.originalTarget = undefined;
			return true;
		}
		return false;
	}
	
	
	ajax.capturePhpInfos = function(text) {
		return this.extract(/\<\!\-\-\s*ajaxReportedInfo:\s*/, /\s*\/ajaxReport\-\-\>/, text);
	}
	
	ajax.capturePhpErrors = function(text) {
		return this.extract(/\<\!\-\-\s*ajaxReportedError:\s*/, /\s*\/ajaxReport\-\-\>/, text);
	}
	
//		var errors = [];
//		var error_sources = text.split(/\<\!\-\-\s*ajaxReportedError:\s*/);
//		
//		var counter = 0;
//		for (var i=1; i < error_sources.length; i++)
//			errors[counter++] = error_sources[i].split(/\s*\/ajaxReport\-\-\>/)[0];
//		
//		if (errors.length) {
//			return errors;
//		} else {
//			return null;
//		}
	
	// @todo : dolaczyc do opcji.
	ajax.includeScripts = function(text) {
		var files = this.extract(/<script.*src=\"/, /\"[^>]*>/, text);
		for (i in files) {
			ajax.include(files[i]);
		}
	}
//		var files = [];
//		var file_sources = text.split(/<script.*src=\"/);
//		
//		var counter = 0;
//		for (var i=1; i < file_sources.length; i++)
//			files[counter++] = escape(file_sources[i].split(/\"[^>]*>/)[0]);
//		
//		for(i = 0; i < counter; i++)
//			ajax.include(files[i]);


	ajax.evalScripts = function(text) {	
		var scripts = this.extract(/<script.*?>/, /<\/script>/, text);

		for (i in scripts) {
			eval(scripts[i]);
		}
//		var scripts = [];
//		var script_sources = text.split(/<script.*?>/);
//		
//		counter = 0;
//		for (var i=1; i < script_sources.length; i++)
//			scripts[counter++] = script_sources[i].split(/<\/script>/)[0];
//		
//		for (i=0; i < counter; i++)
//			eval( scripts[i] );
	}

	ajax.extract = function(beginDelimiter, endDelimiter, subject) {
		var parts = [];
		var sources = subject.split(beginDelimiter);
		
		var counter = 0;
		for (var i=1; i < sources.length; i++)
			parts[counter++] = sources[i].split(endDelimiter)[0];
		
		if (parts.length) {
			return parts;
		} else {
			return null;
		}
	}
	
	
	ajax.initLinksHistory = function() {
		advHistory.create(function(query) {
			if (query.length) {
				query = query.split(':');
				if (query.length > 1) {
					ajax.update(query[1], query[0], {evalScripts: true, loaderTo: query[1]});
				} else {
					alert('No container.');
				}
			}
		});
	}

	ajax.include = function(url, options) {
		if (!options) options = {};
		options.method = 'post';
		options.onSuccess = function(request) {
			eval(request.responseText);
		}
		ajax.request(url, options);
	}
}

var ajax = new ajax();
/* $$$ JS file: init.js: */
nConfig.addEvent(window, 'load', function() {
	nInputDescribed($('searchInput'), 'Search', 'describedNotFilled', 'describedFilled');
	if ($('userSearchInput')) nInputDescribed($('userSearchInput'), 'User name', 'describedNotFilled', 'describedFilled');
});

